﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ComparteTuTiempo.Models;
using ComparteTuTiempo.Models.CustomModels;

namespace ComparteTuTiempo.Controllers
{
    public class ListarTrabajos
    {
        private List<trabajossolicitados> trabajos = new List<trabajossolicitados>();
        private compartetutiempoEntities db = new compartetutiempoEntities();


        public trabajossolicitados trabResueltoById(int idTrabajo)
        {
            trabajossolicitados tra = db.trabajossolicitados
                .Where(t=>t.idTrabajosSolicitados==idTrabajo 
                    && t.realizado==true)
                    .FirstOrDefault();
            return (tra);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="idTrabajo"></param>
        public void trbVisitado(int idTrabajo)
        {
            trabajossolicitados tra = db.trabajossolicitados.Find(idTrabajo);
            tra.visualizado = 1;
            db.SaveChanges();
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="idUsuario"></param>
        /// <returns></returns>
        public List<trabajossolicitados> trabSinLeer(int idUsuario)
        {
            trabajos = db.trabajossolicitados
                .Where(t => t.idtrabajador == idUsuario
                    && t.visualizado == null).ToList();


            return trabajos;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="idtrabajo"></param>
        /// <param name="idUsuario"></param>
        public void msgVisitado(int idTrabajo,int idUsuario)
        {
            
            trabajossolicitados tra = db.trabajossolicitados.Find(idTrabajo);
            foreach (var item in tra.trabajosconversaciones)
            {
                if (item.idAutor != idUsuario)
                {
                    item.visualizado = 1;
                }
            }
            db.SaveChanges();

        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="idUsuario"></param>
        /// <returns></returns>
        public List<int> MsgSinLeer(int idUsuario)
        {

            List<int> tir = db.trabajosconversaciones
                .Where(t => (t.trabajossolicitados.idtrabajador == idUsuario || t.trabajossolicitados.idSolicitante == idUsuario)
                    && t.idAutor != idUsuario
                    && t.visualizado == null).GroupBy(g => g.idTrabajo).Select(g => g.Key).ToList();

            return tir;            
        }


        //METODOS DE SOLICITUD DE TRABAJO AL TRABAJADOR
        // Metodo que lista todos los trabajos que HAN SOLICITADO al usuario
        public List<trabajossolicitados> trabajoMeSolicitan(int idUsuario)
        {

            List<trabajossolicitados> trabajos = db.trabajossolicitados.Where(t => t.usuarios1.idUsuarios == idUsuario
                && t.aceptado == null).ToList();
            return trabajos;
        }

        public List<trabajossolicitados> trabajoMeSolicitan(int idUsuario, int filtro)
        {

            List<trabajossolicitados> trabajos = db.trabajossolicitados.Where(t => t.usuarios1.idUsuarios == idUsuario
                && t.profesiones.idProfesiones == filtro && t.aceptado == null).ToList();
            return trabajos;
        }

        public List<trabajossolicitados> listarTrabajosResolucion(int idUsuario, bool r)
        {
            List<trabajossolicitados> trabajos = db.trabajossolicitados
                .Where(trabajossolicitados => trabajossolicitados.idtrabajador == idUsuario
                    && trabajossolicitados.aceptado==true
                    && trabajossolicitados.realizado == r).ToList();

            return trabajos;
        }

        public List<trabajossolicitados> listarTrabajosResolucion(int idUsuario, bool r,int filtro)
        {
            List<trabajossolicitados> trabajos = db.trabajossolicitados
                .Where(t => t.idtrabajador == idUsuario
                  && t.realizado == r
                  && t.idProfesion==filtro).ToList();

            return trabajos;
        }

        //---------------------------------------------\\

        //METODOS PARA LISTAR TRABAJOS SOLICITADOS POR MI COMO CLIENTE
        /// <summary>
        /// 
        /// </summary>
        /// <param name="idTrabajo"></param>
        /// <returns></returns>
        public trabajossolicitados listarTrabajoID(int idTrabajo)
        {
            trabajossolicitados trabajo = db.trabajossolicitados
                  .Where(trabajossolicitados => trabajossolicitados.idTrabajosSolicitados == idTrabajo).First();
            return trabajo;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="idUsuario"></param>
        /// <param name="r"></param>
        /// <returns></returns>
        public List<trabajossolicitados> listarTrabajosResolucionCliente(int idUsuario, bool r)
        {
            List<trabajossolicitados> trabajos = db.trabajossolicitados
                .Where(trabajossolicitados => trabajossolicitados.idSolicitante == idUsuario
                && trabajossolicitados.realizado == r).ToList();

            return trabajos;
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="idUsuario"></param>
        /// <param name="r"></param>
        /// <param name="filtro"></param>
        /// <returns></returns>
        public List<trabajossolicitados> listarTrabajosResolucionCliente(int idUsuario, bool r, int filtro)
        {
            List<trabajossolicitados> trabajos = db.trabajossolicitados
                .Where(t => t.idSolicitante == idUsuario
                  && t.realizado == r
                  && t.idProfesion == filtro).ToList();

            return trabajos;
        }
        

        //Listar todos los trabajos en los que el solicitante sea el usuario logeado.
        public List<trabajossolicitados> ListarTrabajosSolicitado(int idUsuario)
        {
            List<trabajossolicitados> trabajos = db.trabajossolicitados
                .Where(trabajossolicitados => trabajossolicitados.idSolicitante == idUsuario
                 && trabajossolicitados.realizado==false).ToList();

            return trabajos;
        }

        // Listar los trabajos dependiendo del estado de aceptado. La variable opcion de tipo bool? acepta nulos
        public List<trabajossolicitados> ListarTrabajosSolicitado(int idUsuario,bool option)
        {
            List<trabajossolicitados> trabajos = db.trabajossolicitados
                        .Where(trabajossolicitados => trabajossolicitados.idSolicitante == idUsuario
                            && trabajossolicitados.realizado == false
                            && trabajossolicitados.aceptado == option).ToList();

            return trabajos;
        }

        public List<trabajossolicitados> ListarTrabajosSolicitado(int idUsuario,string pendientes )
        {
            List<trabajossolicitados> trabajos = db.trabajossolicitados
                        .Where(trabajossolicitados => trabajossolicitados.idSolicitante == idUsuario
                            && trabajossolicitados.aceptado == null).ToList();

            return trabajos;
        }
        //TODO
        //----------------------------------------------\\

    }
}